﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace Presentation
{
    public partial class QLHocSinh : Form
    {
        int siso = 0;
        public QLHocSinh()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void QLHocSinh_Load(object sender, EventArgs e)
        {                        
            _makhoi.DataSource = BUSKhoi.getAll();
            _makhoi.DisplayMember = "tenkhoi";
            _makhoi.ValueMember = "makhoi";

            _malop.ResetText();
            var dt = BUSLop.getAll((int)_makhoi.SelectedValue);;
            _malop.DataSource = dt;
            _malop.DisplayMember = "tenlop";
            _malop.ValueMember = "malop";

            reload();
            if (dataGridView1.SelectedRows.Count > 0)
            {
                loadhs(dataGridView1.SelectedRows[0]);
            }
            
            checksiso();
        }

        private void checksiso() 
        {
            siso = dataGridView1.Rows.Count;
            var qd = BUSQuyDinh.DocQuyDinh();
            if (siso > qd.Sisomax)
            {
                button1.Enabled = false;
            }
            else
            {
                button1.Enabled = true;
            }
        }

        private void _makhoi_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            if (cb.Focused)
            {
                _malop.ResetText();
                _malop.DataSource = BUSLop.getAll((int)cb.SelectedValue);
                _malop.DisplayMember = "tenlop";
                _malop.ValueMember = "malop";

                reload();
                if (dataGridView1.SelectedRows.Count > 0)
                {
                    loadhs(dataGridView1.SelectedRows[0]);
                }
                checksiso();
            }            
        }
        private void _malop_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            if (cb.Focused)            
            {
                reload();
                if (dataGridView1.SelectedRows.Count > 0)
                {
                    loadhs(dataGridView1.SelectedRows[0]);
                }
                checksiso();
            }            
        }

        private void reload()
        {
            if (_malop.Items.Count > 0)
            {                
                dataGridView1.DataSource = BUSHocSinh.getAll(new DTOHocSinh() { MaLop = (int)_malop.SelectedValue });
                dataGridView1.Columns[0].HeaderText = "Mã Học Sinh";
                dataGridView1.Columns[1].HeaderText = "Mã Lớp";
                dataGridView1.Columns[2].HeaderText = "Họ Tên";
                dataGridView1.Columns[3].HeaderText = "Giới Tính";
                dataGridView1.Columns[4].HeaderText = "Ngày Sinh";
                dataGridView1.Columns[5].HeaderText = "Địa Chỉ";
                dataGridView1.Columns[5].HeaderText = "Email";
                dataGridView1.Columns[6].HeaderText = "Ngày Tạo";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            add();            
        }

        private void add()
        {
            DTOHocSinh hs = new DTOHocSinh()
            {
                MaLop = (int)_malop.SelectedValue,
                HoTen = _hoten.Text,
                GioiTinh = _gioitinhnam.Checked ? true : false,
                NgaySinh = _ngaysinh.Value,
                DiaChi = _diachi.Text,
                Email = _email.Text,
                NgayTao = DateTime.Today
            };

            if (check(hs))
            {
                BUSHocSinh.Add(hs);
                MessageBox.Show("Học sinh đã được thêm vào danh sách", "Thông báo", MessageBoxButtons.OK);
                reload();                
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                if (MessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận xóa", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {                    
                    BUSHocSinh.Delete(new DTOHocSinh() {
                        MaLop = (int)_malop.SelectedValue,
                        MSHS = (int)dataGridView1.SelectedRows[0].Cells[0].Value 
                    });
                    MessageBox.Show("Học sinh đã được xóa", "Thông báo", MessageBoxButtons.OK);
                    reload();
                    if (dataGridView1.SelectedRows.Count > 0)
                    {
                        loadhs(dataGridView1.SelectedRows[0]);
                    }
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {            
            DTOHocSinh hs = new DTOHocSinh()
            {
                MSHS = (int)dataGridView1.SelectedRows[0].Cells[0].Value,
                MaLop = (int)_malop.SelectedValue,
                HoTen = _hoten.Text,
                GioiTinh = _gioitinhnam.Checked?true:false,
                NgaySinh = _ngaysinh.Value,
                DiaChi = _diachi.Text,
                Email = _email.Text,
                NgayTao = DateTime.Today
            };

            if (dataGridView1.SelectedRows.Count > 0 && check(hs))
            {
                BUSHocSinh.Edit(hs);
                MessageBox.Show("Thông tin của học sinh đã được cập nhật", "Thông báo", MessageBoxButtons.OK);
                reload();                
            }
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            loadhs(((DataGridView)sender).CurrentRow);
        }
     
        private void loadhs(DataGridViewRow row)
        {            
            _hoten.Text = (string)row.Cells["hoten"].Value;
            _diachi.Text = (string)row.Cells["diachi"].Value;
            _email.Text = (string)row.Cells["email"].Value;
            if ((bool)row.Cells["gioitinh"].Value)
            {
                _gioitinhnam.Checked = true;
            }
            else
            {
                _gioitinhnu.Checked = true;
            }
            _ngaysinh.Value = (DateTime)row.Cells["ngaysinh"].Value;            
        }

        private bool check(DTOHocSinh hs)
        {            
            StringBuilder str = new StringBuilder();            
            TimeSpan tsAge = DateTime.Now.Subtract(hs.NgaySinh);
            var age = new DateTime(tsAge.Ticks).Year - 1;
            var qd = BUSQuyDinh.DocQuyDinh();
            //QĐ1: Tuổi học sinh từ 15 đến 20.
            if (age < qd.Tuoimin || age > qd.Tuoimax)
            {                
                str.AppendLine("Tuổi học sinh từ "+qd.Tuoimin+" đến "+qd.Tuoimax+".");
            }

            if (hs.HoTen.Trim() == "")
            {             
                str.AppendLine("Xin vui lòng nhập họ tên");
            }

            if (hs.DiaChi.Trim() == "")
            {
                str.AppendLine("Xin vui lòng nhập địa chỉ");
            }

            if (hs.Email.Trim() == "")
            {
                str.AppendLine("Xin vui lòng nhập email");
            }

            if (!_gioitinhnam.Checked && !_gioitinhnu.Checked )
            {             
                str.AppendLine("Xin vui lòng chọn giới tính");
            }

            siso = dataGridView1.Rows.Count;            
            if (siso >= qd.Sisomax)
            {             
                str.AppendLine("Sỉ số lớp không được quá "+qd.Sisomax+" học sinh.");
            }

            if (str.Length > 0)
            {
                MessageBox.Show(str.ToString(), "Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        private void QLHocSinh_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show(e.KeyCode.ToString());
            if (e.KeyCode == Keys.Enter)
            {
                add();
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            _hoten.ResetText();
            _gioitinhnam.Checked = true;
            _ngaysinh.ResetText();
            _diachi.ResetText();
            _email.ResetText();           
        }        
    }
}
